_t_e_s_s Specifies the tessellation object (created with gggglllluuuuNNNNeeeewwwwTTTTeeeessssssss).
_l_o_c_a_t_i_o_n Specifies the location of the vertex.
_d_a_t_a Specifies an opaque pointer passed back to the program with the
vertex callback (as specified by gggglllluuuuTTTTeeeessssssssCCCCaaaallllllllbbbbaaaacccckkkk).
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
gggglllluuuuTTTTeeeessssssssVVVVeeeerrrrtttteeeexxxx describes a vertex on a polygon that the program defines.
Successive gggglllluuuuTTTTeeeessssssssVVVVeeeerrrrtttteeeexxxx calls describe a closed contour. For example, to
describe a quadrilateral gggglllluuuuTTTTeeeessssssssVVVVeeeerrrrtttteeeexxxx should be called four times.
gggglllluuuuTTTTeeeessssssssVVVVeeeerrrrtttteeeexxxx can only be called between gggglllluuuuTTTTeeeessssssssBBBBeeeeggggiiiinnnnCCCCoooonnnnttttoooouuuurrrr and
_d_a_t_a normally points to a structure containing the vertex location, as
well as other per-vertex attributes such as color and normal. This
pointer is passed back to the user through the GGGGLLLLUUUU____TTTTEEEESSSSSSSS____VVVVEEEERRRRTTTTEEEEXXXX or
GGGGLLLLUUUU____TTTTEEEESSSSSSSS____VVVVEEEERRRRTTTTEEEEXXXX____DDDDAAAATTTTAAAA callback after tessellation (see the gggglllluuuuTTTTeeeessssssssCCCCaaaallllllllbbbbaaaacccckkkk
reference page).
EEEEXXXXAAAAMMMMPPPPLLLLEEEE
A quadrilateral with a triangular hole in it can be described as follows:
It is a common error to use a local variable for _l_o_c_a_t_i_o_n or _d_a_t_a and
store values into it as part of a loop. For example:
for (i = 0; i < NVERTICES; ++i) {
GLdouble data[3];
data[0] = vertex[i][0];
data[1] = vertex[i][1];
data[2] = vertex[i][2];
gluTessVertex(tobj, data, data);
}
This doesn't work. Because the pointers specified by _l_o_c_a_t_i_o_n and _d_a_t_a
might not be dereferenced until gggglllluuuuTTTTeeeessssssssEEEEnnnnddddPPPPoooollllyyyyggggoooonnnn is executed, all the
vertex coordinates but the very last set could be overwritten before
tessellation begins.
Two common symptoms of this problem are consists of a single point (when
a local variable is used for _d_a_t_a) and a GGGGLLLLUUUU____TTTTEEEESSSSSSSS____NNNNEEEEEEEEDDDD____CCCCOOOOMMMMBBBBIIIINNNNEEEE____CCCCAAAALLLLLLLLBBBBAAAACCCCKKKK
error (when a local variable is used for _l_o_c_a_t_i_o_n).